import tkinter as tk
from tkinter import filedialog
import pandas as pd
import os

# 创建GUI窗口
window = tk.Tk()
window.title("文件拆分工具")
window.geometry("400x300")

# 定义选择输入文件的函数
def select_input_file():
    input_file_path = filedialog.askopenfilename(title='选择输入文件')
    input_file_entry.delete(0, tk.END)  # 清空输入框
    input_file_entry.insert(0, input_file_path)

# 定义选择输出目录的函数
def select_output_dir():
    output_dir_path = filedialog.askdirectory(title='选择输出目录')
    output_dir_entry.delete(0, tk.END)  # 清空输入框
    output_dir_entry.insert(0, output_dir_path)

# 定义处理文件的函数
# 处理文件的函数
def process_files():
    input_file = input_file_entry.get()
    output_dir = output_dir_entry.get()

    if gui_option_var.get() == "是":
        output_dir = os.path.dirname(input_file)  # 使用输入文件的目录作为输出目录

    try:
        xl = pd.ExcelFile(input_file)
        for sheet_name in xl.sheet_names:
            df = xl.parse(sheet_name)

            # 生成文件名
            output_file = f'{output_dir}/{sheet_name}.xlsx'
            count = 1

            while os.path.exists(output_file):
                output_file = f'{output_dir}/{sheet_name}_{count}.xlsx'
                count += 1

            # 保存文件
            df.to_excel(output_file, index=False)

        result_label.config(text="文件处理成功！", fg="green")
    except Exception as e:
        result_label.config(text=f"发生错误：{str(e)}", fg="red")

# 创建选择输入文件按钮和输入框
input_file_label = tk.Label(window, text="选择输入文件:")
input_file_label.pack()

input_file_button = tk.Button(window, text="选择文件", command=select_input_file)
input_file_button.pack()

input_file_entry = tk.Entry(window)
input_file_entry.pack()

# 创建GUI选项
gui_option_frame = tk.Frame(window)
gui_option_frame.pack()

gui_option_label = tk.Label(gui_option_frame, text="是否使用默认输出路径?")
gui_option_label.grid(row=0, column=0)

gui_option_var = tk.StringVar()
gui_option_var.set("是")  # 默认选中“是”

gui_radio_button_yes = tk.Radiobutton(gui_option_frame, text="是", variable=gui_option_var, value="是")
gui_radio_button_yes.grid(row=0, column=1)

gui_radio_button_no = tk.Radiobutton(gui_option_frame, text="否", variable=gui_option_var, value="否")
gui_radio_button_no.grid(row=0, column=2)

# 创建选择输出目录按钮和输入框
output_dir_label = tk.Label(window, text="选择输出目录:")
output_dir_label.pack()

output_dir_button = tk.Button(window, text="选择目录", command=select_output_dir)
output_dir_button.pack()

output_dir_entry = tk.Entry(window)
output_dir_entry.pack()

# 创建处理文件按钮和结果显示标签
process_button = tk.Button(window, text="处理文件", command=process_files)
process_button.pack()

result_label = tk.Label(window, text="")
result_label.pack()

# 根据GUI选项更新输出路径输入框的状态和按钮的状态
def update_output_dir_entry_state(*args):
    if gui_option_var.get() == "是":
        output_dir_entry.delete(0, tk.END)
        output_dir_entry.insert(0, input_file_entry.get())
        output_dir_entry.config(state="disabled")
        output_dir_button.config(state="disabled")  # Disable output directory button
    else:
        output_dir_entry.config(state="normal")
        output_dir_button.config(state="normal")  # Enable output directory button

gui_option_var.trace("w", update_output_dir_entry_state)

# 初始化时设置默认为“是”
gui_option_var.set("是")
update_output_dir_entry_state()  # 更新输出路径输入框和按钮的状态

# 启动GUI
window.mainloop()
